import { ForbiddenError, ServerError, UnknownError, UploadError } from "../../utils/errors";
import createError from "http-errors";

export default (err: any, _req: any, res: any, _next: any) => {
  // jwt认证错误
  if (err.name === "JsonWebTokenError" || err.name === "TokenExpiredError") {
    const body = new ForbiddenError("未登录，或登录已过期").toResponseJSON();
    res.send(body);
    return;
  }

  // 自定义错误
  if (err instanceof ServerError) {
    res.send(err.toResponseJSON());
    return;
  }

  // 上传文件错误
  if (err.name === "MulterError") {
    res.send(new UploadError(err.message).toResponseJSON());
    return;
  }

  if (createError.isHttpError(err)) {
    res.status(err.status || 500);
    res.send(err.message);
    return;
  }

  // 未知错误
  res.send(new UnknownError().toResponseJSON());
  console.log("错误处理中间件>>> ", err);
};
